﻿/*******************************************************
* Copyright (c) 2018-2088, By XuXiang all rights reserved.
*
* FileName: FightModule.h
* Summary: 战斗模块。
*
* Author: XuXiang
* Date: 2024-05-20 22:42
*******************************************************/

#ifndef __FightModule_h__
#define __FightModule_h__

#include <Frame/ModuleBase.h>
#include <map>
#include "FightInfo.h"
using namespace std;

namespace Competition
{
	//登陆模块
	class FightModule : public ModuleBase
	{
	public:

		//选择角色时间
		static int SelectRoleTime;

		//战前等待时间
		static int FightWatiTime;

		//构造析构函数
		FightModule();
		virtual ~FightModule();

		//注册网络消息
		virtual void RegisterNetMessage(NetManagerBase *pMgr);

		//注册存储消息
		virtual void RegisterStorageMessage(StorageManager* pMgr);

		//初始化配置列表
		virtual void AddConfig(vector<ModuleConfig*> &cfgs);

		//初始化
		virtual void Init();

		//帧更新
		virtual void OnUpdate();

		//是否启用帧Update
		virtual bool IsEnableUpdate() { return true; }

		//销毁
		virtual void Release();

		//秒更新
		virtual void OnUpdatePerSecond();

		//获取用户所在的组信息
		FightGroupInfo* GetUserGroup(int user_id);

		//获取用户战斗状态
		int GetPlayerFightState(int user_id);

	private:

		void OnFightStateRequest(NetDataItem* item);
		void OnFightSelectRoleRequest(NetDataItem* item);
		void OnFightLoadingProgressRequest(NetDataItem* item);
		void OnFightOperateRequest(NetDataItem *item);
		void OnFightResultRequest(NetDataItem* item);
		void OnFightQuitRequest(NetDataItem *item);
		void OnFightFrameRecordRequest(NetDataItem *item);

		EVENT_DEFINE(FightModule, MatchComplete);
		EVENT_DEFINE(FightModule, UserOutline);

		//检测战斗组是否可关闭
		void CheckGroupClose(FightGroupInfo *group);

		//检测战斗组是否结束
		void CheckGroupEnd(FightGroupInfo* group);

		//当前要分配的组ID。
		int m_CurGroupID;

		//战斗组集合
		FightGroupMap m_FightGroups;

		//用户id到组id的映射查询。
		std::map<int, int> m_UserToGroup;
	};
}

#endif